import Bus from "@/utils/bus";

interface FontConfig {
  'font-color': string;
  'select-menu-font-color': string;
}

interface ThemeMap {
  [key: string]: FontConfig;
}

const themeMap: ThemeMap = {
  '#2c3e50': { 'font-color': '#fff', 'select-menu-font-color': '#25a395' },
  '#5EB2E6': { 'font-color': '#fff', 'select-menu-font-color': 'cyan' },
  '#dd524d': { 'font-color': '#fff', 'select-menu-font-color': 'gold' },
  '#13C2C2': { 'font-color': '#fff','select-menu-font-color': 'green' },
  '#EE4F12': { 'font-color': '#fff', 'select-menu-font-color': 'gold' },
  '#0096C7': { 'font-color': '#fff', 'select-menu-font-color': 'gold' },
  '#FFFFFF': { 'font-color': '#000', 'select-menu-font-color': 'darkcyan' },
};

// 定义主题key
const _themeColorKey = '--theme-color';
const _fontColorKey = '--font-color';
const _selectMenuFontColorKey = '--select-menu-font-color';

const setSysTheme = (bgColor: string) => {
  if (!themeMap[bgColor]) {
    uni.showToast({ title: "主题切换失败", icon: "error" });
    console.error('主题色不存在, theme.ts 中不存在对应的颜色');
    return;
  }
  Bus.emit('change-theme-color', bgColor);// 通知组件切换主题色
  uni.setStorageSync(_themeColorKey, bgColor);
  const fontColor = themeMap[bgColor]["font-color"];
  const selectMenuFontColor = themeMap[bgColor]["select-menu-font-color"];

  // #ifdef H5
  document.documentElement.style.setProperty(_themeColorKey, bgColor);
  document.documentElement.style.setProperty(_fontColorKey, fontColor);
  document.documentElement.style.setProperty(_selectMenuFontColorKey, selectMenuFontColor);
  // #endif

  // #ifdef APP-PLUS
  // 设置状态栏字体颜色
  plus.navigator.setStatusBarStyle(bgColor === "#FFFFFF" ? "dark" : "light");
  const pages = plus.webview.all();
  pages.forEach(page => {
    page.evalJS(`
      document.documentElement.style.setProperty('${_themeColorKey}', '${bgColor}');
      document.documentElement.style.setProperty('${_fontColorKey}', '${fontColor}');
      document.documentElement.style.setProperty('${_selectMenuFontColorKey}', '${selectMenuFontColor}');
    `);
  });
  // #endif
}

export { themeMap, setSysTheme, _themeColorKey };